﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DAO.Bussiness.Repository;
using DAO.Model;

public partial class Reservar : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        MesaRepository mesa = new MesaRepository();

        /*List<Mesa> mesas = mesa.All().ToList();
        int maximo = 0;
        foreach(Mesa row in mesas) {
            if (row.Nro_Comensales > maximo)
                maximo = row.Nro_Comensales;
                
        }

        List<int> numeros = new List<int>();
        int cont = 2;
        while(cont <= maximo){
            numeros.Add(cont);
            cont++;
        }
        ddlComenzales.DataSource = numeros;
        ddlComenzales.DataBind();*/



    }

    protected void btnCancelarComanda_Click(object sender, EventArgs e)
    {
        Response.Redirect("home.aspx");
    }

    protected void btnAceptaComandar_Click(object sender, EventArgs e)
    {
        ReservaRepository rr = new ReservaRepository();
        Reserva reserva = new Reserva();
        Cliente cli = new Cliente();
        ClienteRepository cr = new ClienteRepository();
        try
        {
            if (validarCampos())
            {
                String lal = calFecha.SelectedDate.Date.ToShortDateString();


                String f = calFecha.SelectedDate.Date.ToShortDateString();
                String hora = ddlHora.SelectedItem.Text;
                DateTime hoy = DateTime.Now;

                DateTime fecha = Convert.ToDateTime(f + " " + hora);

                if (hoy.CompareTo(fecha) <= 1)
                {
                    UsuarioRepository ur = new UsuarioRepository();
                    List<Usuario> usuarios = ur.All().ToList();

                    Usuario usuarioLogeado = new Usuario();
                    foreach (Usuario user in usuarios)
                    {
                        if (user.Direccion == User.Identity.Name)
                        {
                            usuarioLogeado = user;
                        }
                    }

                    reserva.Fecha_Reserva = fecha; //calFecha.SelectedDate;
                    reserva.Id_Usuario = usuarioLogeado.Id_Usuario;
                    reserva.Cantidad_Comensales = Convert.ToInt32(ddlComenzales.SelectedItem.Text);
                    reserva.Id_Mesa = Convert.ToInt32(ddlComenzales.SelectedValue);


                    // HARCODEADOOO!!!!
                    reserva.Id_Estado = 1;
                    rr.Add(reserva);
                    rr.Save();
                }
                else
                {
                    lblError.Text = "La fecha debe ser mayor a hoy !!!";
                }

                ClientScript.RegisterStartupScript(this.GetType(), "myScript", "<script>javascript: alert('Se guardaron los datos satisfactoriamente');</script>");
                // aca tiene qe hacer algo para cargar de nuevo 
                ddlComenzales.Items.Clear();
            }
            else
            {
                lblError.Text = "Complete todos los campos.";
            }
        }
        catch (Exception ex)
        {
            lblError.Text = "Error, en la grabación de la reserva !!!";

        }
        finally
        {
            CleanControl(this.Controls);
            //Response.Redirect("home.aspx");                
        }
    }

   

    private bool validarCampos()
    {
        if (calFecha.SelectedDate.ToString() != "" && ddlHora.SelectedIndex >= 0  && ddlComenzales.SelectedIndex >= 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    public void CleanControl(ControlCollection controles)
    {
        foreach (Control control in controles)
        {
            if (control is TextBox)
                ((TextBox)control).Text = string.Empty;
            else if (control is DropDownList)
                ((DropDownList)control).ClearSelection();
            else if (control is Calendar)
                ((Calendar)control).SelectedDate = System.DateTime.Now;
            else if (control.HasControls())
                //Esta linea detécta un Control que contenga otros Controles
                //Así ningún control se quedará sin ser limpiado.
                CleanControl(control.Controls);
        }
    }

    protected void calFecha_SelectionChanged1(object sender, EventArgs e)
    {
        if (calFecha.SelectedDate <= DateTime.Now.AddDays(-1))
        {
            calFecha.SelectedDate = DateTime.Now;
            ClientScript.RegisterStartupScript(this.GetType(), "myScript", "<script>javascript: alert('Debe seleccionar una fecha posterior a la actual.');</script>");
        }

        if (ddlHora.SelectedItem.Text != "")
        {
            DateTime fecha = new DateTime(calFecha.SelectedDate.Year, calFecha.SelectedDate.Month, calFecha.SelectedDate.Day, Convert.ToDateTime(ddlHora.SelectedValue).Hour, Convert.ToDateTime(ddlHora.SelectedValue).Minute, 00);
            DataSourceComenzales.SelectCommand = "select DISTINCT m.Nro_Comensales, m.Id_Mesa," + 
                                                "(SELECT TOP 1 aux.Id_Mesa  from Mesa as aux " +
                                                " where aux.Nro_Comensales = m.Nro_Comensales and aux.Id_Mesa not in (select Id_Mesa from Reserva where Reserva.Fecha_Reserva = '" + fecha.ToString("yyyy-MM-dd hh:mm") + "')) as 'Top' " +
                                                " from Mesa as m " +
                                                " where m.Id_Mesa not in (select Id_Mesa from Reserva where Reserva.Fecha_Reserva = '"+ fecha.ToString("yyyy-MM-dd hh:mm") +"') and " +
                                                " m.Id_Mesa = (SELECT TOP 1 aux.Id_Mesa  from Mesa as aux " +
                                                " where aux.Nro_Comensales = m.Nro_Comensales and aux.Id_Mesa not in (select Id_Mesa from Reserva where Reserva.Fecha_Reserva = '" + fecha.ToString("yyyy-MM-dd hh:mm") + "')) "+
                                                " order by m.Nro_Comensales";
            DataSourceComenzales.DataBind();
            ddlComenzales.DataBind();
            if (ddlComenzales.Items.Count <= 0)
            {
                lblError.Text = "No hay turnos para ese d&iacute;a, horario y comenzales.";
            }
            else
            {
                lblError.Text = "";
            }
        }


    }

    protected void calFecha_Init(object sender, EventArgs e)
    {
        calFecha.SelectedDate = DateTime.Now;
    }

    
}